home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 February: Tool Chest / Dev.CD Feb 00 TC.toast / pc / tool chest / development kits / hypercard related / xcmds & xfcns / byrne's xcmds&xfcns / source / volfrompath.c < prev   
Encoding:
C/C++ Source or Header  |  1991-03-17  |  2.9 KB  |  129 lines

  1. /*
  2.  
  3.     VolFromPath() XFCN v1.1
  4.     
  5.     ©1991 Apple Computer, Inc.; by Mike Byrne
  6.     
  7.     This XFCN will take a full pathname and simply return the volume name at the beginning of it,
  8.     without the colon.
  9.     
  10.     Form:
  11.     VolFromPath(<pathName>)
  12.     
  13.     # the MPW 3.2 build commands:
  14.     C -b VolFromPath.c -mbg off
  15.         Link -w -t STAK -c WILD -rt XFCN=616 ∂
  16.             -m ENTRYPOINT ∂
  17.             -sg VolFromPath ∂
  18.             VolFromPath.c.o ∂
  19.             "{Libraries}HyperXLib.o" ∂
  20.             "{Libraries}Runtime.o" ∂
  21.             "{Libraries}Interface.o" ∂
  22.             "{CLibraries}StdCLib.o" ∂
  23.             -o "teststack"
  24. */
  25.  
  26. #include <string.h>
  27. #include <Memory.h>
  28. #include "HyperXCmd.h"
  29.  
  30. #define NULL '\0'
  31. #define NIL 0L
  32.  
  33. #define kNumParams 1
  34.  
  35.  
  36. /* prototypes */
  37. void ErrorBack(XCmdPtr paramPtr, char *message);
  38. void MoveLockParams ( XCmdPtr paramPtr, short paramCount );
  39. void UnlockParams  ( XCmdPtr paramPtr, short paramCount );
  40.  
  41.  
  42.  
  43. pascal void EntryPoint(XCmdPtr paramPtr)
  44. {
  45.     /* variable declarations */
  46.     char*    volName;
  47.  
  48.  
  49.     /* move high and lock the parameters. */
  50.     MoveLockParams(paramPtr, paramPtr->paramCount);
  51.  
  52.     /* check for copyright or syntax help request */
  53.     if (!strcmp( (char*)*paramPtr->params[0], "!") ) {
  54.         ErrorBack(paramPtr, "v1.1, ©1991 Apple Computer, Inc.; by Mike Byrne");
  55.         UnlockParams(paramPtr, paramPtr->paramCount);
  56.         return;
  57.     } else if (!strcmp ( (char*)*paramPtr->params[0], "?") ) {
  58.         ErrorBack(paramPtr, "VolFromPath syntax is 'VolFromPath(<pathName>)'");
  59.         UnlockParams(paramPtr, paramPtr->paramCount);
  60.         return;
  61.     }
  62.  
  63.     /* not a copyright or help request.       */     
  64.     /* check for correct number of parameters */
  65.     if (paramPtr->paramCount != kNumParams) {
  66.         ErrorBack(paramPtr, "Error: VolFromPath syntax is 'VolFromPath(<pathName>)'");
  67.         UnlockParams(paramPtr, paramPtr->paramCount);
  68.         return;
  69.     }
  70.     
  71.     /* do a strrchr to find the last colon, then increment by 1 to skip that. */
  72.     volName =  strtok( (char*)*paramPtr->params[0], ":");
  73.     
  74.     /* that's it.  go home. */
  75.     ErrorBack(paramPtr, volName);
  76.     UnlockParams(paramPtr, paramPtr->paramCount);
  77.     return;
  78.  
  79. }
  80.  
  81.  
  82.  
  83.  
  84.  
  85.     
  86. /* allocate and load up paramPtr->returnValue with a string 
  87.    -------------------------------------------------------- */
  88. void ErrorBack(XCmdPtr paramPtr, char *message)
  89. {
  90.     Handle  mesHnd;
  91.  
  92.     /*
  93.         Allocate space for an error message.
  94.         Copy the string into it.
  95.         Return the handle to HyperCard.
  96.     */
  97.     mesHnd = NewHandle((long)(strlen(message)+1));
  98.     if (mesHnd == nil) return;
  99.     strcpy((char *)*mesHnd,message);
  100.     paramPtr->returnValue = mesHnd;
  101. }
  102.  
  103.  
  104.  
  105. /*  move high and lock down all parameters  
  106.     ----------------------------------------------------------------------- */
  107. void MoveLockParams ( XCmdPtr paramPtr, short paramCount )
  108. {
  109.     short i;
  110.     
  111.     for(i=0; i <= paramCount-1; i++)
  112.     {
  113.         MoveHHi(paramPtr->params[i]);
  114.         HLock(paramPtr->params[i]);
  115.     }
  116. }
  117.  
  118.  
  119.  
  120.  
  121. /* unlock all parameter handles in the XCmdBlock  
  122.    ---------------------------------------------  */
  123. void UnlockParams  ( XCmdPtr paramPtr, short paramCount )
  124. {    short i;
  125.     
  126.     for(i=0; i <= paramCount-1; i++)
  127.         { HUnlock(paramPtr->params[i]);}
  128. }
  129.